package sip_core

/*
控制命令定义如下:
	<elementname="Control">
		<complexType>
			<sequence>
				<! -- 控制请求命令序列如下-->
			</sequence>
		</complexType>
	</element>
*/

//DeviceControl 控制命令xml结构
type DeviceControl struct {
	//CmdType = DeviceControl
	*SipMsgXML
	//球机/云台控制命令(可选,控制码应符合附录 A 中的 A.3中的规定)
	PTZCmd PTZType `xml:"PTZCmd"`
	//远程启动控制命令(可选)
	TeleBoot string `xml:"TeleBoot"`
	//录像控制命令(可选)
	RecordCmd RecordType `xml:"RecordCmd"`
	//报警布防/撤防命令(可选)
	GuardCmd GuardType `xml:"GuardCmd"`
	//报警复位命令(可选)
	AlarmCmd string `xml:"AlarmCmd"`
	//强制关键帧命令,设备收到此命令应立刻发送一个IDR帧(可选)
	IFameCmd string `xml:"IFameCmd"`
	//拉框放大控制命令(可选)
	DragZoomIn DragZoom `xml:"DragZoomIn"`
	//拉框缩小控制命令(可选)
	DragZoomOut DragZoom `xml:"DragZoomOut"`
	//看守位控制命令(可选)
	HomePosition struct {
		//看守位使能1:开启,0:关闭(必选)
		Enabled int `xml:"Enabled"`
		// 自动归位时间间隔,开启看守位时使用,单位:秒(s)(可选)
		ResetTime int `xml:"ResetTime"`
		//调用预置位编号,开启看守位时使用,取值范围0~255(可选)
		PresetIndex int `xml:"PresetIndex"`
	} `xml:"HomePosition"`
	//报警复位控制时,扩展此项,携带报警方式、报警类型
	AlarmInfo struct {
		//复位报警的报警方式属性
		AlarmMethod string `xml:"AlarmMethod"`
		//复位报警的报警类型属性
		AlarmType string `xml:"AlarmType"`
	} `xml:"Info"`
	// //扩展信息,可多项
	// Info string `xml:"Info"`
}

//DragZoom 拉框控制命令xml结构
type DragZoom struct {
	//播放窗口长度像素值(必选)
	Length int `xml:"Length"`
	//播放窗口宽度像素值(必选)
	Width int `xml:"Width"`
	//拉框中心的横轴坐标像素值(必选)
	MidPointX int `xml:"MidPointX"`
	//拉框中心的纵轴坐标像素值(必选)
	MidPointY int `xml:"MidPointY"`
	//拉框长度像素值(必选)
	LengthX int `xml:"LengthX"`
	//拉框宽度像素值(必选)
	WidthY int `xml:"WidthY"`
}

//DevicesConfigControl 设备配置xml结构
type DevicesConfigControl struct {
	//CmdType = DeviceConfig
	*SipMsgXML
	//基本参数配置(可选)
	BasicParam struct {
		//设备名称(可选)
		Name string `xml:"Name"`
		//注册过期时间(可选)
		Expiration string `xml:"Expiration"`
		//心跳间隔时间(可选)
		HeartBeatInterval int `xml:"HeartBeatInterval"`
		//心跳超时次数(可选)
		HeartBeatCount int `xml:"HeartBeatCount"`
	} `xml:"BasicParam"`
	//SVAC编码配置(可选)
	SVACEncodeConfig struct {
		//感兴趣区域参数(可选)
		ROIParam struct {
			//感兴趣区域开关,取值0:关闭,1:打开(可选)
			ROIFlag int `xml:"ROIFlag"`
			//感兴趣区域数量,取值范围0~16(可选)
			ROINumber int `xml:"ROINumber"`
			//感兴趣区域(可选)
			Items []struct {
				//感兴趣区域编号,取值范围1~16(可选)
				ROISeq int `xml:"ROISeq"`
				//感兴趣区域左上角坐标,参考 GB/T25724—2010的5.2.4.4.2定义,取值范围0~19683(可选)
				TopLeft int `xml:"TopLeft"`
				//感兴趣区域右下角坐标,参考 GB/T25724—2010的5.2.4.4.2定义,取值范围0~19683(可选)
				BottomRight int `xml:"BottomRight"`
				//ROI区域编码质量等级,取值0:一般,1:较好,2:好,3:很好(可选)
				ROIQP int `xml:"ROIQP"`
			}
			//背景区域编码质量等级,取值0:一般,1:较好,2:好,3:很好(可选)
			BackGroundQP int `xml:"BackGroundQP"`
			//背景跳过开关,取值0:关闭,1:打开(可选)
			BackGroundSkipFlag int `xml:"BackGroundSkipFlag"`
		} `xml:"ROIParam"`
		//音频参数(可选)
		AudioParam struct {
			//声音识别特征参数开关,取值0:关闭,1:打开(必选)
			AudioRecognitionFlag int `xml:"AudioRecognitionFlag"`
		}
	} `xml:"SVACEncodeConfig"`
	//SVAC解码配置(可选)
	SVACDecodeConfig struct {
		//SVC参数(可选)
		SVCParam struct {
			//码流显示模式,取值0:基本层码流单独显示方式;1:基本层+1个增强层码流方式;2:基本层+2个增强层码流方式;3:基本层+3个增强层码流方式;(必选)
			SVCSTMMode int `xml:"SVCSTMMode"`
		} `xml:"SVCParam"`
		//监控专用信息参数(可选)
		SurveillanceParam struct {
			//绝对时间信息显示开关,取值0:关闭,1:打开(可选)
			TimeShowFlag int `xml:"TimeShowFlag"`
			//监控事件信息显示开关,取值0:关闭,1:打开(可选)
			EventShowFlag int `xml:"EventShowFlag"`
			//报警信息显示开关,取值0:关闭,1:打开(可选)
			AlerShowtFlag int `xml:"AlerShowtFlag"`
		} `xml:"SurveillanceParam"`
	} `xml:"SVACDecodeConfig"`
}
